package com.zxc.gulimall.product;


import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/*
* springCache的不足：
*  1、读模式（读数据）：
*       缓存穿透:查询一个null数据-->配置:ache-null-value=true
*       缓存击穿:大量并发进来同时查询一个正好过期的数据-->加锁（默认不加锁）@Cacheable-->设置 sync=true(加本地锁)
*       缓存雪崩：大量过期key-->加过期时间。
*  2、写模式（写数据）（缓存与数据库的一致）
*       读写锁。
*       引入canal，感知到mysql的更新去更新数据库
*       读多写多，直接去数据库
*
*  常规数据（读多写少），即时性，一致性要求不高的数据，可以使用springCache
*  特殊数据：特殊设计（canal...）
* */
@EnableRedisHttpSession
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.zxc.gulimall.product.feign")
@EnableCaching//开启缓存功能
@MapperScan(basePackages = "com.zxc.gulimall.product.dao")
public class GulimallProductApp {
    public static void main(String[] args) {
        SpringApplication.run(GulimallProductApp.class);
    }
}
